home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / amiga / plotting / gnuplot3.lzh / gnuplot / term / vws.trm < prev    next >
Encoding:
Text File  |  1991-09-08  |  7.8 KB  |  288 lines

  1. /* GNUPLOT - vws.trm */
  2. /*
  3.  * Copyright (C) 1990
  4.  *
  5.  * Permission to use, copy, and distribute this software and its
  6.  * documentation for any purpose with or without fee is hereby granted,
  7.  * provided that the above copyright notice appear in all copies and
  8.  * that both that copyright notice and this permission notice appear
  9.  * in supporting documentation.
  10.  *
  11.  * Permission to modify the software is granted, but not the right to
  12.  * distribute the modified code.  Modifications are to be distributed
  13.  * as patches to released version.
  14.  *
  15.  * This software  is provided "as is" without express or implied warranty.
  16.  *
  17.  * This file is included by ../term.c.
  18.  *
  19.  * This terminal driver supports:
  20.  *   IRIS terminals
  21.  *
  22.  * AUTHORS
  23.  *   Walter Speth
  24.  *           BITNET: SPETH@DBNPIB5
  25.  *
  26.  * send your comments or suggestions to (pixar!info-gnuplot@sun.com).
  27.  *
  28.  */
  29.  
  30. #define VWS_XMAX   1024
  31. #define VWS_YMAX   780
  32. #define VWS_VCHAR  25
  33. #define VWS_HCHAR  15
  34. #define VWS_VTIC   10
  35. #define VWS_HTIC   10
  36.  
  37. #include stdio
  38. /*
  39. #include math
  40. #include ssdef
  41. */
  42. #include descrip
  43.  
  44. #include <uisentry.h>
  45. #include <uisusrdef.h>
  46.  
  47.  
  48. #define DEFAULT_ATTR 0
  49. #define OVER_ATTR 1
  50. #define ERAS_ATTR 2
  51. #define BIS_ATTR 3
  52. #define COLOR_ATTR 4
  53. #define TEXT_ATTR 5
  54. #define LINE_ATTR 6
  55. #define BACK_ATTR 7
  56.  
  57.  
  58. float current_x, current_y;
  59.  
  60.  
  61. int vd_id, wd_id;
  62. int vcm_id;
  63.  
  64. static $DESCRIPTOR(ws_devname, "SYS$WORKSTATION");
  65. static $DESCRIPTOR(vd_title, "gnuplot");
  66.  
  67. static float x0, y0, xsiz, ysiz,
  68.              wc_xmin_new, wc_ymin_new, wc_xmax_new, wc_ymax_new,
  69.              wc_xmin, wc_ymin, wc_xmax, wc_ymax,
  70.              vd_width, vd_height;
  71.  
  72. VWS_resize_ast()
  73. { uis$resize_window(&vd_id, &wd_id, &x0, &y0, &xsiz, &ysiz,
  74.                      &wc_xmin, &wc_ymin, &wc_xmax, &wc_ymax);
  75.   replotrequest();
  76. }
  77. /****************************************************************************/
  78. VWS_init()
  79.  
  80.  
  81. {
  82.   int i;
  83.   int cattr;
  84.   $DESCRIPTOR(a_font,"DTABER0003WK00PG0001UZZZZ02A000");
  85.  
  86.   vd_width  = 14;
  87.   vd_height = 10; /* aspect sqrt(2) as DIN A paper */
  88.  
  89.   wc_xmin = 0.0;
  90.   wc_ymin = 0.0;
  91.   wc_xmax = (float) VWS_XMAX;
  92.   wc_ymax = (float) VWS_YMAX;
  93.  
  94.   vcm_id = uis$create_color_map(&8);
  95.  
  96.   vd_id = uis$create_display(&wc_xmin, &wc_ymin, &wc_xmax, &wc_ymax,
  97.                              &vd_width, &vd_height, &vcm_id);
  98.  
  99.   uis$set_color(&vd_id, &0, &.5, &.5, &.5);
  100.   uis$set_color(&vd_id, &1, &0.0, &0.0, &0.0);
  101.   uis$set_color(&vd_id, &2, &0.0, &0.0, &0.0);
  102.   uis$set_color(&vd_id, &3, &0.0, &0.0, &0.0);
  103.   uis$set_color(&vd_id, &4, &0.0, &0.0, &0.0);
  104.   uis$set_color(&vd_id, &5, &0.0, &0.0, &0.0);
  105.   uis$set_color(&vd_id, &6, &0.0, &0.0, &0.0);
  106.   uis$set_color(&vd_id, &7, &0.0, &0.0, &0.0);
  107.  
  108. /*
  109.   uis$set_color(&vd_id, &2, &.2, &.2, &.2);
  110.   uis$set_color(&vd_id, &3, &.3, &.3, &.3);
  111.   uis$set_color(&vd_id, &4, &.4, &.4, &.4);
  112.   uis$set_color(&vd_id, &5, &.5, &.5, &.5);
  113.   uis$set_color(&vd_id, &6, &.6, &.6, &.6);
  114.   uis$set_color(&vd_id, &7, &.7, &.7, &.7);
  115.  
  116. /* perhaps better for color terms (which I do not have)
  117.   uis$set_color(&vd_id, &0, &0.0, &0.0, &0.0);
  118.   uis$set_color(&vd_id, &1, &0.9, &0.0, &0.0);
  119.   uis$set_color(&vd_id, &2, &0.0, &0.9, &0.0);
  120.   uis$set_color(&vd_id, &3, &0.9, &0.9, &0.0);
  121.   uis$set_color(&vd_id, &4, &0.0, &0.0, &0.9);
  122.   uis$set_color(&vd_id, &5, &0.9, &0.0, &0.9);
  123.   uis$set_color(&vd_id, &6, &0.0, &0.9, &0.9);
  124.   uis$set_color(&vd_id, &7, &0.9, &0.9, &0.9);
  125. /*
  126. */
  127.   uis$disable_display_list(&vd_id);
  128.  
  129.   wd_id = uis$create_window(&vd_id, &ws_devname, &vd_title,
  130.                             &wc_xmin, &wc_ymin, &wc_xmax, &wc_ymax,
  131.                             &vd_width, &vd_height);
  132.  
  133.   uis$set_resize_ast(&vd_id, &wd_id, &VWS_resize_ast, &0,
  134.                      &x0, &y0, &xsiz, &ysiz,
  135.                      &wc_xmin_new, &wc_ymin_new, &wc_xmax_new, &wc_ymax_new);
  136.  
  137.   uis$set_writing_mode(&vd_id, &DEFAULT_ATTR, &OVER_ATTR, &UIS$C_MODE_OVER);
  138.   uis$set_writing_mode(&vd_id, &DEFAULT_ATTR, &ERAS_ATTR, &UIS$C_MODE_ERAS);
  139.   uis$set_writing_mode(&vd_id, &DEFAULT_ATTR, &BIS_ATTR, &UIS$C_MODE_BIS);
  140. /*
  141.   for (i=0; i<8; i++) {
  142.     cattr = COLOR_ATTR+i;
  143.     uis$set_writing_index(&vd_id, ©_ATTR, &cattr, &i);
  144.     }
  145. */
  146.   uis$set_background_index(&vd_id, &DEFAULT_ATTR, &BACK_ATTR, &0);
  147.   uis$set_writing_mode(&vd_id, &DEFAULT_ATTR, &TEXT_ATTR, &UIS$C_MODE_OVER);
  148.   uis$set_font(&vd_id,&TEXT_ATTR,&TEXT_ATTR,&a_font);
  149.   uis$set_char_size(&vd_id,&TEXT_ATTR,&TEXT_ATTR,&0,
  150.                     &(float)VWS_HCHAR,&(float)VWS_VCHAR);
  151.   uis$set_line_style(&vd_id,&LINE_ATTR,&LINE_ATTR,&0xFFFFFFFF);
  152. }
  153.  
  154. /****************************************************************************/
  155.  
  156. VWS_reset()
  157. {
  158.   uis$delete_display(&vd_id);
  159. }
  160. /****************************************************************************/
  161. VWS_scale(xs,ys)
  162. int xs,ys;
  163. {
  164.         return FALSE;
  165. }
  166. /****************************************************************************/
  167. VWS_graphics()
  168. {
  169.     uis$erase(&vd_id, &wc_xmin, &wc_ymin, &wc_xmax, &wc_ymax);
  170. }
  171. /****************************************************************************/
  172. VWS_text()
  173. {
  174. }
  175. /****************************************************************************/
  176. VWS_move(x,y)
  177. int x,y;
  178. {
  179.   current_x= (float)(x);
  180.   current_y= (float)(y);
  181. }
  182. /****************************************************************************/
  183. VWS_vector(x,y)
  184. int x,y;
  185. { int col;
  186.   float fx,fy;
  187.   fx=(float) x;
  188.   fy=(float) y;
  189.  
  190.       uis$line(&vd_id, &LINE_ATTR,
  191.                ¤t_x, ¤t_y, &fx, &fy);
  192.       VWS_move (x,y);
  193. }
  194. /****************************************************************************/
  195. VWS_linetype(lt)
  196. int lt;
  197. {
  198. long int lstyle[9]={    0xffffffff,
  199.                         0Xff00ff00,
  200.                         0xffffff00,
  201.                         0xffff0000,
  202.                         0xf0f0f0f0,
  203.                         0Xfff0fff0,
  204.                         0xf000f000,
  205.                         0xa5a5a5af,
  206.                         0xf00f00f0 };
  207.  
  208.   switch(lt) {
  209. case -1: uis$set_line_style(&vd_id,&LINE_ATTR,&LINE_ATTR,&0xFFFFFFFF);
  210.          uis$set_line_width(&vd_id,&LINE_ATTR,&LINE_ATTR,&1.5);
  211.          break;
  212. case -2: uis$set_line_style(&vd_id,&LINE_ATTR,&LINE_ATTR,&0xFFFFFFFF);
  213.          uis$set_line_width(&vd_id,&LINE_ATTR,&LINE_ATTR,&2.0);
  214.          break;
  215. /*
  216. default:  uis$set_line_style(&vd_id,&LINE_ATTR,&LINE_ATTR,&lstyle[lt % 8]);
  217.           makes part of curve disappear on my workstation
  218. */
  219. default:  uis$set_line_style(&vd_id,&LINE_ATTR,&LINE_ATTR,&0xFFFFFFFF);
  220.          uis$set_line_width(&vd_id,&LINE_ATTR,&LINE_ATTR,&1.0);
  221. }
  222. }
  223.  
  224. /****************************************************************************/
  225. static int justify_mode =CENTRE,up;;
  226.  
  227. VWS_put_text(x,y,str)
  228. int x,y; char* str;
  229. {
  230.   float fx,fy, thih, twid;
  231.  
  232.  
  233. /* uis$text parameter is descriptor string not character string */
  234.  
  235.   struct dsc$descriptor_s textline = {0,DSC$K_DTYPE_T,DSC$K_CLASS_S,""};
  236.  
  237.  
  238.   textline.dsc$a_pointer = str;
  239.   textline.dsc$w_length = strlen(textline.dsc$a_pointer);
  240.   uis$measure_text(&vd_id,&TEXT_ATTR,&textline,&twid,&thih);
  241.   fx=(float)x;
  242.   fy=(float)y;
  243.  
  244.   switch (justify_mode) {
  245.   case LEFT : fy+=thih/2.;
  246.               break;
  247.   case RIGHT : fy+=thih/2.;
  248.                fx-=twid;
  249.               break;
  250.  
  251.   case CENTRE : fy+=thih/2.;
  252.                fx-=twid/2;
  253.               break;
  254.   };
  255.  
  256.   uis$text(&vd_id,&TEXT_ATTR,&textline,&fx,&fy);
  257.      /* write to Example Viewport window */
  258.  
  259.  
  260. }
  261. /****************************************************************************/
  262. VWS_text_angle(ang)
  263. int ang;
  264. {
  265.   float degrees;
  266.   degrees=90.*(up=ang);
  267.   uis$set_text_slope (&vd_id, &TEXT_ATTR, &TEXT_ATTR, °rees);
  268. return TRUE;
  269. }
  270. /****************************************************************************/
  271. VWS_justify_text(mode)
  272. int mode;
  273. { justify_mode=mode;
  274. return TRUE;
  275. }
  276. /****************************************************************************/
  277. VWS_point(x,y,point)
  278. int x,y,point;
  279. {
  280. do_point(x,y,point);
  281. }
  282. /****************************************************************************/
  283. VWS_arrow(sx,sy,ex,ey)
  284. int sx,sy,ex,ey;
  285. {
  286. do_arrow(sx,sy,ex,ey);
  287. }
  288.